Many modem computer systems such as graphics workstations and personal computers (PCs) include specialized graphics subsystems for rendering two-dimensional and three-dimensional graphical objects on a display device such as a cathode ray tube (CRT), a plasma flat-panel, or a liquid crystal display (LCD). The use of a graphics subsystem allows for increased system performance because graphics operations once handled by the host processor of the computer system can be performed by the graphics subsystem concurrently (in parallel) with other operations performed by the host processor. Furthermore, graphics subsystems, which are often provided with specialized hardware and software, typically render graphical objects more quickly.
The amount of graphics processing that the graphics subsystem itself performs determines, to a large extent, the increase in both system performance and graphics processing performance. For example, one prior graphics subsystem merely includes a frame buffer memory and associated control hardware, and the general purpose host processor must still perform the majority of the graphics processing functions. Such an approach is inefficient because the host processor must transfer a relatively large amount of data to the frame buffer, which prevents other system components and subsystems from concurrently using the system interconnect. Another prior graphics subsystem includes a specialized graphics processor that operates in parallel with the host processor and performs all of the required graphic processing functions, but such an approach may be cost-prohibitive for some users.
A balance between the two extreme approaches is needed to provide improved system performance and graphics processing performance at a reasonable cost. One proposed system requires the host processor to perform some initial graphics processing steps after which a graphics controller performs the remaining graphics processing steps. Such a division of labor allows the amount of data exchanged between the host processor and the graphics subsystem to be reduced, which improves the overall system performance when compared to the "dumb" graphics subsystems of the prior art. In order to increase graphics processing performance, the graphics controller should be provided with performance enhancing features that increase the speed at which graphical objects are rendered, but such performance enhancing features should be provided at a relatively low cost.
One area wherein graphics processing performance may be increased is in the interpolation of output primitives. To efficiently store graphics data, application programs provide and use output primitives that represent graphical objects wherein each output primitive provides a minimum of information from which the complete information regarding a graphical object may be implied or interpolated. For example, one type of output primitive is a triangle that specifies the position (in a two-dimensional Cartesian coordinate space, or x versus y) and the attributes (including z and color attributes such as r, g, and b) of three vertices, and the position and attributes of every point within the triangle can be interpolated from the provided values for the vertices. Other types of output primitives include points, straight lines, curved lines, circles, triangles and other polygons, triangle strips, and triangle fans.
The process of interpolation for filled area polygons such as triangles typically comprises the following steps: 1) set up; 2) edge walking; and 3). span generation. During set up, delta values for each of the pixel parameters (e.g., the position and attributes) are calculated based on the pixel parameter values for the vertices of the output primitive. The delta values are then used to perform edge walking wherein the pixel parameters for pixels on the non-horizontal edges (i.e., edges having a non-zero slope) of the polygon are calculated by incrementing the delta values. Once the edges of the polygon have been determined, span generation occurs wherein the pixel parameters for pixels located in the horizontal scan lines between the edges of the polygon are calculated. In this manner, the pixel parameters for each pixel in a polygon may be calculated from an output primitive. The step of span generation is particularly amenable to modification to improve performance. For example, the y value for each of the pixels in the span remains fixed.